export type SortDirection = 'ascend' | 'descend' | null;
export type SummaryType = 'sum' | 'avg' | 'max' | 'min' | 'count';

export type ColumnConfig<T = Record<string, any>> = {
	key: keyof T;
	keyType?: 'string' | 'number' | 'mixed';
	title: string;
	align: 'left' | 'center' | 'right';
	width: number;
	minWidth: number;
	class: string;
	// 新增：排序相关配置
	sortable?: boolean;
	// 新增：筛选相关配置
	filterable?: boolean;
	filters?: {
		value: string;
		label: string;
	}[];
	dataFilters?: boolean;
	onFilter?: (value: any, record: T) => boolean;
	// 🔥 新增：子列配置
	children?: ColumnConfig<T>[];
	// 🔥 新增：辅助属性，用于计算 rowSpan/colSpan
	colSpan?: number;
	rowSpan?: number;
	level?: number;
	// 🔥 新增：合计相关配置
	summary?: boolean | SummaryType;
	summaryText?: string; // 合计文本（通常用于第一列，如"合计"）
	summaryMethod?: (data: T[]) => string | number; // 自定义合计计算方法
	summaryColSpan?: number; // 🔥 新增：合并列数 (默认为 1)
	summaryFormatter?: (value: number | string) => string; // 🔥 新增：格式化函数
	slots: {
		header?: () => any;
		cell?: (scope: { row: T; index: number; column: ColumnConfig<T> }) => any;
		filterDropdown?: (props: {
			column: ColumnConfig<T>;
			value: any;
			onConfirm: (value: any) => void;
			onReset: () => void;
			onClose: () => void;
		}) => any;
	};
};

// 定义上下文类型：包含添加和移除列的方法，以及排序和筛选方法
export type TableContext = {
	addColumn: (config: ColumnConfig) => void;
	removeColumn: (key: ColumnConfig['key']) => void;
	// // 新增：排序相关方法
	// sort: (key: ColumnConfig['key'], direction: SortDirection) => void;
	// // 新增：筛选相关方法
	// filter: (key: ColumnConfig['key'], value: (string | number)[] | null | undefined, type: 'option' | 'string' | 'customize') => void;
};
// 列组件内部通信 Context
export type ColumnContext = {
	addChild: (config: ColumnConfig) => void;
	removeChild: (key: ColumnConfig['key']) => void;
};

// 1. 定义用于渲染表头的包装类型 (View Model)
export interface HeaderCell {
	key: string;
	config: ColumnConfig; // 引用原始配置
	colSpan: number;
	rowSpan: number;
	level: number;
	isGroup: boolean;
	// 🔥 新增：直接包含子节点，形成树形结构
	children?: HeaderCell[];
}
// 🔥 新增：合计单元格渲染模型
export interface SummaryCell {
	key: string;
	value: string | number;
	colSpan: number;
	width: number; // 合并后的像素宽度
	align: 'left' | 'center' | 'right';
	skip: boolean; // 标记该单元格是否被前一个合并单元格覆盖（渲染时跳过）
}
// 创建唯一上下文键（避免冲突）
export const tableContextKey = Symbol('table-context');
export const columnContextKey = Symbol('column-context'); // 🔥 新增
